Error-correcting codes are means of Forward Error Correction (FEC) frequently used for transmission or storage of payload data. An error-correcting code adds redundancy to the payload data resulting in transport data. The redundancy may allow averaging out noise or compensating for shot noise introduced into the transport data by the transmission channel. In the case of data recording, such as a magnetic recording channel, the redundancy may allow compensating a burst error caused by at least one of writing, storage, and reading.
Error-correcting codes encompass convolutional codes and block codes, such as turbo codes, which may involve a convolutional code as well. In order to convolutionally encode the payload data, a shift register of an encoder is regularly set to an initial state. The initial state can be zero-valued for terminated convolutional codes or “tail-biting” for tail-biting convolutional codes. A tail-biting initial state is typically equal to a final state of the register. Both termination and tail-biting turn the convolutional code into a block code. As opposed to terminated convolutional codes, any possible register state may be the tail-biting initial state, which typically varies from transport block to transport block in a way unpredictable for a receiver.
On the receiver side, terminated convolutional codes can be rapidly decoded based on the known zero-valued initial state at the price of a fractional rate loss, since a number of zero bits (equal to or greater than the register bit length) has to be appended to the payload data. Tail-biting convolutional codes avoid such fractional rate loss. Tail-biting is particularly valuable in applications, such as packet transmission, in which transport blocks are apt to be short.
Modern mobile communication standards, including Long-Term Evolution (LTE), stipulate a tail-biting convolutional code to encode Downlink Control Information (DCI) transmitted on a Physical Downlink Control Channel (PDCCH) and a Master Information Block (MIB) transmitted on a Physical Broadcast Channel (PBCH). Besides the FEC provided by the convolutional code, the DCI is error-protected by a 16-bit Cyclic Redundancy Check (CRC). Since the size of the DCI may significantly vary in bit length, filling bits ensure that the payload data fulfills format constraints prescribed by the standard.
The price for avoiding the rate loss compared to terminated convolutional codes is an increased decoding complexity of the tail-biting convolutional codes. Decoding a signal encoded by a tail-biting convolutional code requires iterating a Viterbi algorithm several times until a tail-biting condition is fulfilled, whereas a signal encoded by a terminated convolutional code is decodable by a single run of the Viterbi algorithm. Computational complexity on the receiver side thus multiplies by at least the number of iterations of the Viterbi algorithm. Particularly under poor channel conditions, the Viterbi iterations may even fail to converge to a Viterbi path fulfilling the tail-biting condition, causing loss of the payload data.